Apache
<google uid="C01" position="left"></google>
Trucs et astuces pour Apache sans y perdre ses plumes (<--- hahaha).
Personnaliser le listing de répertoire
Module Apache Autoindex / FancyIndex
Installez le module ad hoc :
a2enmod autoindex
Ou décommentez dans le fichier .conf :
LoadModule autoindex_module libexec/apache22/mod_autoindex.so ... Include etc/apache22/extra/httpd-autoindex.conf
Modifiez le .htaccess à la racine comme dans l'exemple :
HeaderName /header.html ReadmeName /readme.html IndexOptions NameWidth=30 DescriptionWidth=57 DefaultIcon http://tremulous.bricosoft.com/images/icons/Human/Items/Helmet.png AddIcon http://tremulous.bricosoft.com/images/icons/Human/Structures/Reactor.png tgz AddIcon http://tremulous.bricosoft.com/images/icons/Human/Structures/Reactor.png zip AddIcon http://tremulous.bricosoft.com/images/icons/Human/Structures/Repeater.png ^^DIRECTORY^^ AddIcon http://tremulous.bricosoft.com/images/icons/Alien/Structures/Booster.png ^^BLANKICON^^ AddIcon http://tremulous.bricosoft.com/images/icons/Human/Items/BattleSuit.png cfg AddIcon http://tremulous.bricosoft.com/images/icons/Alien/Aliens/Tyrant.png txt AddDescription "customized htaccess for this pretty listing" htaccess.txt AddDescription "!delire" delire.cfg AddDescription "rotation des maps" maprotation.cfg AddDescription "Tremx pk3 used by server" tremx
header.html et readme.html contiennent les portions de code HTML pour personnaliser l'entête et le pied du listing comme par exemple :
Dépannage / troubleshooting
Si cet .htaccess ne change pas l'apparence du listing, commentez la ligne :
# AllowOverride None
Si les fichiers HeaderName et ReadmeName sont ignorés, testez avec un .txt puis commentez ce genre de ligne dans le .conf :
# AddType application/x-httpd-php .php .htm .html
Accès restreint
Tout le monde interdit sauf adresses 92.231.*
order deny,allow deny from all allow from 92.231
Avec mot de passe
Créez le fichier qui contiendra l'identifiant et le mot-de-passe. Ne le placez pas dans l'arborescence web.
htpasswd -c ~/.htmot2passe alibaba
Dans le dossier à protéger :
AuthName "restricted stuff" AuthType Basic AuthUserFile "/home/tremulous/.htmot2passe" require valid-user
Pour rajouter un utilisateur (jeu de login/mdp) :
htpasswd ~/.htmot2passe toto
Désactiver PHP pour un répertoire / disable PHP for a folder
dans le .conf :
<Directory "/home/tremulous/www/base"> php_admin_flag engine off </Directory>
Statistiques d'accès
Pour être noyé sous les informations de visites, installez :
- Webalizer, la référence
- AWStats, une autre référence
- Google Analytics, avec profils marketing, webmaster, décideur pressé
- Firestats, moins verbeux, ajax
-
Webalizer, pas de fioritures
-
AWStats
-
Google Analytics, prêt à être copié-collé dans le business plan
-
Limpide
Ré-écriture d'URL / URL rewriting
La ré-écriture d'URL([1]) peut être utilisée pour rendre une URL plus lisible et/ou indexable dans un moteur de recherche.
RewriteEngine on RewriteRule nouvelle ancienne
Installer
# a2enmod rewrite
Tester
$ vim .htaccess RewriteEngine on RewriteRule ^gnafreu\.html$ /index.html [L]
Broutez ensuite http://site-pour.ri/gnafreu.html et ça affichera votre index. Par contre http://site-pour.ri/plop.html sera 404.
Si gnafreu.html est aussi 404 vérifiez d'avoir bien activé le parsing des .htaccess dans la config apache du site. Il ne doit pas y avoir de "AllowOverride None" dans <Directory /> de votre /etc/apache2/sites-available/www.site-pour.ri.
Exemple : pattern Front Controller
Si la requête n'est pas a lien symbolique, fichier ou dossier rediriger vert le controleur Front :
RewriteEngine On #-s : si le fichier existe et est > #-l : si le fichier est un lien symbolique #-d : si c'est un dossier #flags : NC (nocase), L (last rule) [2] RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
SEO : avoid duplicate content / évitez le contenu dupliqué
Si votre config DNS et votre jolie config de virtualhost Apache renvoi www.tfz.me vers tfz.me sans indiquer qu'il s'agit d'une redirection, les moteurs de recherche vont considérer tfz.me/blabla et www.tfz.me/blabla comme du contenu dupliqué (c'est mal). La bonne pratique est de dire à cet idiot-bête de robot indexeur qu'il n'y a qu'un seul site et que l'un redirige vers l'autre : soit tfz.me redirige vers www.tfz.me, soit l'inverse et reciproquement (merde c'est pourtant clair !).
Le spider (je vous ai eu c'est un autre nom du robot indexeur car comme dieu il a une infinité de noms) comme tout les client http ne comprends que les nombres :
301 - indique que la ressource est déplacé pour l'éternité. 302 - pareil mais temporaire
Apache a des modules pour faire ça : alias et rewrite. Rewrite est plus classe car la syntaxe est inbitable même après 10 ans de pratique et vous fera passer pour 1337. Utilisez alias si vous êtes un noob ou si votre ego est sain et équilibré.
Donc avec rewrite, vérifiez qu'il soit chargé :
$ a2enmod rewrite Module rewrite already enabled $ cat /etc/apache2/sites-enabled/www.tfz.me | grep AllowOverride AllowOverride All
Avec All c'est OK on peut utiliser les .htaccess, si c'est None changez ça en All à moins que vous ne souhaitiez mettre vos règles de réécritures dans la définition de votre virtualHost(démerdez-vous j'ai pas envie).
On peut bidouiller le .htaccess à la racine du site :
tfz.me/www$ vim .htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.tfz\.me
RewriteRule (.*) http://www.tfz.me/$1 [R=301,L]
Vérifiez ensuite avec cet outil en ligne : http://www.ragepank.com/redirect-check/ ou avec un addon firefox pour les en-têtes http dont j'ai oublié le nom.
C'est pas tout il reste à faire la même chose pour l'index.php :
tfz.me/www$ vim .htaccess
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ http://www.tfz.me/$1 [R=301,L]
plop.
Vérifiez la syntaxe des .conf
# apache2ctl -t Syntax OK
cacher la version d'apache
Dans /etc/apache2/conf.d, il faut modifier les directives ServerTokens et ServerSignature :
- ServerTokens
Cette directive configure le retour d'une réponse HTTP. Par défaut c'est 'Full' qui envoi des infos sur l'OS et les modules compilés. La liste du plus verbeux au moins est : Full | OS | Minimal | Minor | Major | Prod
#ServerTokens Minimal #ServerTokens OS #ServerTokens Full ServerTokens Prod
- ServerSignature
Cette directive rajoute une ligne à la fin des pages générées par le serveur (erreurs, etc). La liste est : On | Off | EMail (liens vers le ServerAdmin définit dans votre <VirtualHost>)
#ServerSignature Off #ServerSignature On ServerSignature EMail
modules
je module, je module et je fais des bulles
pagespeed
pagespeed par gougle : http://code.google.com/intl/fr-FR/speed/page-speed/download.html
$ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_i386.deb # dpkg -i mod-pagespeed-beta_current_i386.deb # apt-get -f install # /etc/init.d/apache2 restart
userdir
Ce module permet d'avoir une url dans son home :
http://localhost/~toto/
Dans votre home créez un dossier public_html :
$ cd $ mkdir public_html
userdir est souvent installé par défaut mais pas actif
# a2enmod userdir
Puis relancez le serveur httpd :
# service apache restart
erreurs courantes (ou pas)
Invalid command 'RewriteEngine'
$ sudo a2enmod rewrite
... the first has precedence, perhaps you need a NameVirtualHost directive
logs
$ tail -f access.log |cut -d" " -f11-100|grep -vE "(bingbot|Googlebot|Ezooms|Baiduspider)"
{{#evp:dailymotion|x3jxu_fresh-prince-contest_fun|Apache, jump on it! jump on it!}}