# Koha Apache Configuration Directives

#NameVirtualHost *

## OPAC
<VirtualHost __WEBSERVER_IP__:__WEBSERVER_PORT__>
   ServerAdmin  __WEBMASTER_EMAIL__
   DocumentRoot __OPAC_WWW_DIR__
   ServerName __WEBSERVER_HOST__
#  ServerAlias opac.mydomain.com
   ScriptAlias /cgi-bin/koha/ "__OPAC_CGI_DIR__/opac/"
   ScriptAlias /index.html "__OPAC_CGI_DIR__/opac/opac-main.pl"
   ScriptAlias /opac-search.pl "__OPAC_CGI_DIR__/opac/opac-search.pl"
   ScriptAlias /search "__OPAC_CGI_DIR__/opac/opac-search.pl"
   ErrorLog __LOG_DIR__/koha-opac-error_log
#  CustomLog __LOG_DIR__/koha-opac-access.log combined
#  TransferLog __LOG_DIR__/koha-opac-access.log
   SetEnv KOHA_CONF "__KOHA_CONF_DIR__/koha-conf.xml"
   SetEnv PERL5LIB "__PERL5LIB_DIRS__"

   # This syntax allows you to override a system preference
   # for a given virtual host. Use with caution!
   # You should add all the system preferences you override
   # in one or more vhosts to the environment variable
   # OVERRIDE_SYSPREF_NAMES for your staff intranet vhost
   # SetEnv OVERRIDE_SYSPREF_PrefName Value

   <Directory "__OPAC_WWW_DIR__">
      Options -Indexes
   </Directory>

   # Secure internal stuff
   <DirectoryMatch "__OPAC_WWW_DIR__/.*/(modules|xslt|includes)">
      Require all denied
   </DirectoryMatch>

   <IfModule mod_gzip.c>
     mod_gzip_on yes
     mod_gzip_dechunk yes
     mod_gzip_keep_workfiles No
     mod_gzip_can_negotiate yes
     mod_gzip_update_static No
     mod_gzip_temp_dir /tmp
     mod_gzip_minimum_file_size 512
     mod_gzip_maximum_file_size 1000000
     mod_gzip_maximum_inmem_size 1000000
     mod_gzip_handle_methods GET POST
     mod_gzip_item_exclude reqheader "User-Agent: .*Mozilla/4\..*\["
     mod_gzip_item_exclude mime ^image/.*
     mod_gzip_item_exclude rspheader Content-Type:image/*
     mod_gzip_item_include file \.js$
     mod_gzip_item_include mime ^application/javascript$
     mod_gzip_item_include mime ^text/javascript$
     mod_gzip_item_include mime ^application/x-javascript$
     mod_gzip_item_include file \.php$
     mod_gzip_item_include mime ^text/html$
     mod_gzip_item_include file \.css$
     mod_gzip_item_include mime ^text/css$
  </IfModule>

  <IfModule mod_deflate.c>

    # Compress content with type html, text, and css, ...
    AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css
    AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript text/javascript application/x-javascript application/json

    DeflateCompressionLevel 9

    # Properly handle old browsers that do not support compression
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    DeflateFilterNote Input instream
    DeflateFilterNote Output outstream
    DeflateFilterNote Ratio ratio

    LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
    <IfModule mod_headers.c>
       #properly handle requests coming from behind proxies
       Header append Vary User-Agent
    </IfModule>
  </IfModule>


#  Repeat this virtualhost stanza changing the following environment vars to
#  create multiple OPAC interfaces with custom css and/or search limits:
#  SetEnv OPAC_CSS_OVERRIDE mystyle.css
#  SetEnv OPAC_SEARCH_LIMIT branch:CODE
#  SetEnv OPAC_LIMIT_OVERRIDE 1

   Options +FollowSymLinks

   ErrorDocument 400 /cgi-bin/koha/errors/400.pl
   ErrorDocument 401 /cgi-bin/koha/errors/401.pl
   ErrorDocument 403 /cgi-bin/koha/errors/403.pl
   ErrorDocument 404 /cgi-bin/koha/errors/404.pl
   ErrorDocument 500 /cgi-bin/koha/errors/500.pl

   <IfModule mod_rewrite.c>
     # Rewrite Rules
     RewriteEngine On

     RewriteRule ^/bib/([^\/]*)/?$ /cgi-bin/koha/opac-detail\.pl?bib=$1 [PT]
     RewriteRule ^/isbn/([^\/]*)/?$ /search?q=isbn:$1 [PT]
     RewriteRule ^/issn/([^\/]*)/?$ /search?q=issn:$1 [PT]
     RewriteRule ^(.*)_[0-9]{2}\.[0-9]{7}\.(js|css)$ $1.$2 [L]

     # REST API configuration
     Alias "/api" "__API_CGI_DIR__"
     <Directory __API_CGI_DIR__>
       Options +ExecCGI +FollowSymlinks
       AddHandler cgi-script .pl

       SetEnv MOJO_MODE "production"

       RewriteEngine On
       RewriteBase /api/
       RewriteCond %{REQUEST_URI} !^/api/v[0-1]+/app.pl
       RewriteRule ^(v[0-9]+)/(.*)$ /api/$1/app.pl/api/$1/$2 [L]

     </Directory>
   </IfModule>

   <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType text/css "access plus 60 days"
      ExpiresByType application/javascript "access plus 60 days"
      ExpiresByType image/png "access plus 12 hours"
      ExpiresByType image/gif "access plus 12 hours"
   </IfModule>
</VirtualHost>

## Intranet
<VirtualHost __WEBSERVER_IP__:__WEBSERVER_PORT_LIBRARIAN__>
   ServerAdmin __WEBMASTER_EMAIL__
   DocumentRoot __INTRANET_WWW_DIR__
   ServerName __WEBSERVER_HOST__:__WEBSERVER_PORT_LIBRARIAN__
#  ServerAlias intranet.mydomain.com
   ScriptAlias /cgi-bin/koha/ "__INTRANET_CGI_DIR__/"
   ScriptAlias /index.html "__INTRANET_CGI_DIR__/mainpage.pl"
   ScriptAlias /search "__INTRANET_CGI_DIR__/catalogue/search.pl"
   Alias /plugin/ "__PLUGINS_DIR__/"
   ErrorLog __LOG_DIR__/koha-error_log
#  TransferLog __LOG_DIR__/koha-access.log
   SetEnv KOHA_CONF "__KOHA_CONF_DIR__/koha-conf.xml"
   SetEnv PERL5LIB "__PERL5LIB_DIRS__"
   Options +FollowSymLinks

   # If you are overriding any system preferences,
   # list them in this variable so the preference editor
   # knows that they have been overridden.
   # SetEnv OVERRIDE_SYSPREF_NAMES "Pref1,Pref2,Pref3"

   ErrorDocument 400 /cgi-bin/koha/errors/400.pl
   ErrorDocument 401 /cgi-bin/koha/errors/401.pl
   ErrorDocument 403 /cgi-bin/koha/errors/403.pl
   ErrorDocument 404 /cgi-bin/koha/errors/404.pl
   ErrorDocument 500 /cgi-bin/koha/errors/500.pl

   <Directory "__INTRANET_WWW_DIR__">
      Options -Indexes
   </Directory>

   # Secure internal stuff
   <DirectoryMatch "__INTRANET_WWW_DIR__/.*/(modules|xslt|includes)">
      Require all denied
      <FilesMatch "\.(json)$">
        Require all granted
      </FilesMatch>
   </DirectoryMatch>

   <IfModule mod_gzip.c>
     mod_gzip_on yes
     mod_gzip_dechunk yes
     mod_gzip_keep_workfiles No
     mod_gzip_can_negotiate yes
     mod_gzip_update_static No
     mod_gzip_temp_dir /tmp
     mod_gzip_minimum_file_size 512
     mod_gzip_maximum_file_size 1000000
     mod_gzip_maximum_inmem_size 1000000
     mod_gzip_handle_methods GET POST
     mod_gzip_item_exclude reqheader "User-Agent: .*Mozilla/4\..*\["
     mod_gzip_item_exclude mime ^image/.*
     mod_gzip_item_exclude rspheader Content-Type:image/*
     mod_gzip_item_include file \.js$
     mod_gzip_item_include mime ^application/javascript$
     mod_gzip_item_include mime ^text/javascript$
     mod_gzip_item_include mime ^application/x-javascript$
     mod_gzip_item_include file \.php$
     mod_gzip_item_include mime ^text/html$
     mod_gzip_item_include file \.css$
     mod_gzip_item_include mime ^text/css$
   </IfModule>

   <IfModule mod_deflate.c>

     # Compress content with type html, text, and css, ...
     AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css
     AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
     AddOutputFilterByType DEFLATE application/javascript text/javascript application/x-javascript application/json

     DeflateCompressionLevel 9

     # Properly handle old browsers that do not support compression
     BrowserMatch ^Mozilla/4 gzip-only-text/html
     BrowserMatch ^Mozilla/4\.0[678] no-gzip
     BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

     DeflateFilterNote Input instream
     DeflateFilterNote Output outstream
     DeflateFilterNote Ratio ratio

     LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
     <IfModule mod_headers.c>
       #properly handle requests coming from behind proxies
       Header append Vary User-Agent
     </IfModule>
  </IfModule>

   <IfModule mod_rewrite.c>
     # Rewrite Rules
     RewriteEngine On

     # Protect dev install
     RewriteRule ^/cgi-bin/koha/(C4|debian|docs|etc|installer/data|install_misc|Koha|misc|selenium|t|test|tmp|xt)/|\.PL$ /notfound [PT]

     RewriteRule ^/bib/([^\/]*)/?$ /cgi-bin/koha/catalogue/detail.pl?biblionumber=$1 [PT]
     RewriteRule ^/isbn/([^\/]*)/?$ /search?q=isbn:$1 [PT]
     RewriteRule ^/issn/([^\/]*)/?$ /search?q=issn:$1 [PT]
     RewriteRule ^(.*)_[0-9]{2}\.[0-9]{7}\.(js|css)$ $1.$2 [L]

     RewriteRule ^/cgi-bin/koha/erm/.*$ /cgi-bin/koha/erm/erm.pl [PT]
     RewriteCond %{REQUEST_URI} !^/cgi-bin/koha/preservation/.*.pl$
     RewriteRule ^/cgi-bin/koha/preservation/.*$ /cgi-bin/koha/preservation/home.pl [PT]
     RewriteRule ^/cgi-bin/koha/admin/record_sources(.*)?$ /cgi-bin/koha/admin/record_sources.pl$1 [PT]

     # REST API configuration
     Alias "/api" "__API_CGI_DIR__"
     <Directory __API_CGI_DIR__>
       Options +ExecCGI +FollowSymlinks
       AddHandler cgi-script .pl

       SetEnv MOJO_MODE "production"

       RewriteEngine On
       RewriteBase /api/
       RewriteCond %{REQUEST_URI} !^/api/v[0-1]+/app.pl
       RewriteRule ^(v[0-9]+)/(.*)$ /api/$1/app.pl/api/$1/$2 [L]
     </Directory>
   </IfModule>

   <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType text/css "access plus 60 days"
      ExpiresByType application/javascript "access plus 60 days"
      ExpiresByType image/png "access plus 12 hours"
      ExpiresByType image/gif "access plus 12 hours"
   </IfModule>
</VirtualHost>

# Uncomment this VirtualHost to enable API access through
# api.__WEBSERVER_HOST__:__WEBSERVER_PORT__
#<VirtualHost __WEBSERVER_IP__:__WEBSERVER_PORT__>
#  ServerAdmin __WEBMASTER_EMAIL__
#  DocumentRoot __INTRANET_CGI_DIR__/api
#  ServerName api.__WEBSERVER_HOST__:__WEBSERVER_PORT__
#  SetEnv KOHA_CONF "__KOHA_CONF_DIR__/koha-conf.xml"
#  SetEnv PERL5LIB "__PERL5LIB_DIRS__"
#  ErrorLog __LOG_DIR__/koha-api-error_log
#
#  <IfModule mod_rewrite.c>
#    <Directory __API_CGI_DIR__>
#      Options +ExecCGI +FollowSymlinks
#      AddHandler cgi-script .pl
#
#      SetEnv MOJO_MODE "production"
#
#      RewriteEngine on
#
#      RewriteRule ^api/(.*) $1 [L]
#
#      RewriteCond %{REQUEST_FILENAME} !-f
#      RewriteCond %{REQUEST_FILENAME} !-d
#      RewriteCond %{DOCUMENT_ROOT}/$1/app.pl -f
#      RewriteRule ^(.*?)/.* $1/app.pl/api/$0 [L]
#    </Directory>
#  </IfModule>
#</VirtualHost>
