#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS function display_help() { uecho "$scriptname: Créer un fichier de redirections pour Apache à partir d'un certain nombre de règles USAGE $scriptname -f rewrite.rules [-o RewriteRules.conf] [-w RewriteRules.html] host OPTIONS -p Générer les directives et tenir compte de proxy_acls Par défaut, le champ proxy_acls est ignoré FORMAT des règles de mapping"' ============================ Les commentaires commencent par le signe "#" Les règles sont de la forme: src:dest:host:suffix:OPTS:prot:proxy_acls ^prefix =literal prot vaut par défaut http. Il peut valoir aussi https Si dest ou suffix se terminent par $, on est en mode NO_SLASH En mode NO_SLASH, si src se termine par $, on est en mode NO_TRAIL * Si dest est de la forme Application.woa En mode NO_SLASH, on génère RewriteRule ^/src(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]$1 [L,OPTS] En mode NO_SLASH+NO_TRAIL, on génère RewriteRule ^/src [prot://host]/cgi-bin/WebObjects/dest[/suffix] [L,OPTS] En mode normal, on génère RewriteRule ^/src$ /src/ RewriteRule ^/src/(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]/$1 [L,OPTS] * Si dest n'\''est pas de la forme Application.woa En mode NO_SLASH, on génère RewriteRule ^/src(.*) [prot://host]/dest[/suffix]$1 [L,OPTS] En mode NO_SLASH+NO_TRAIL, on génère RewriteRule ^/src [prot://host]/dest[/suffix] [L,OPTS] En mode normal, on génère RewriteRule ^/src$ /src/ RewriteRule ^/src/(.*) /dest[/suffix]/$1 [L,OPTS] Si une règle est précédée d'\''une ou plusieurs lignes de la forme "^prefix", ces lignes sont copiées avant chacune des commandes RewriteRule générées pour une règle. Ceci permet d'\''ajouter des conditions avec RewriteCond pour une règle. e.g. ^RewriteCond %{REMOTE_ADDR} 10\..* src:dest.woa qui génère: RewriteCond %{REMOTE_ADDR} 10\..* RewriteRule ^/src$ /src/ RewriteCond %{REMOTE_ADDR} 10\..* RewriteRule ^/src/(.*) /cgi-bin/WebObjects/dest.woa/$1 [L] Une ligne de la forme "=literal" est recopiée sans modifications (sans le "=") dans le fichier de sortie. proxy_acls est utilisé si l'\''option -p est spécifiée et OPTS contient P (comme proxy), ou si le mode de réécriture requière l'\''utilisation d'\''un proxy. * Avec la valeur "None", aucune directive n'\''est générée * Si aucune valeur n'\''est spécifiée, la directive suivante est générée: AddDefaultCharset off Order Deny,Allow Allow from all * Si une valeur est spécifiée, la directive suivante est générée: AddDefaultCharset off Order Allow,Deny Allow from $proxy_acls Dans les exemples donnés ci-dessus, $URL est l'\''url générée par la réécriture, et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.' } function joinurl() { # joindre chaque élément de $1..@ par /, en évitant les slashes en double local i url for i in "$@"; do [ -n "$i" ] || continue if [ -n "$url" ]; then url="${url%/}/${i#/}" else url="$i" fi done [ -n "$url" ] && echo "$url" } proxy_enabled= infile= outfile="RewriteRules.conf" htmlfile= host= parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -p proxy_enabled \ -f: infile= \ -o: outfile= \ -w: htmlfile= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" [ -n "$infile" ] || die "Il faut spécifier le fichier de règles" [ -f "$infile" ] || die "Fichier de règles non trouvé: $(ppath "$infile")" thishost="$1" [ -n "$thishost" ] || die "Il faut spécifier l'hôte pour lequel créer le fichier de configuration" function has_proxy() { # vérifier que les options $1 contiennent 'P' local options array_split options "$1" "," array_contains options P } if [ -n "$htmlfile" ]; then echo ' '"$thishost

$thishost

' >>"$htmlfile" fi