Je n'arrive pas à convertir les fichiers .htaccess en nginx. J'ai 3 fichiers .htaccess. Le premier fichier .htaccess est situé dans la racine du document et se présente comme suit :
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^img-(.*)\.html img.php?id=$1 [L]
RewriteRule ^slide-(.*)\.html slider.php?id=$1 [L]
RewriteRule ^page-(.*)\.html page.php?name=$1 [L]
RewriteRule ^contact\.html$ contact.php [QSA,L,NC]
Le deuxième fichier .htaccess se trouve dans un dossier appelé upload :
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?foo\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ nohotlink.gif [L]
<Files ~ "\.(php|sql|php3|php4|phtml|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
order allow,deny
deny from all
</Files>
Le troisième et dernier fichier .htaccess se trouve dans un sous-répertoire du dossier upload nommé "small" :
RewriteEngine Off
J'ai créé un dossier dans /etc/nginx appelé includes et j'ai créé 3 fichiers .access séparés avec ces règles de réécriture :
Pour le premier fichier .htaccess situé dans le répertoire racine du document, j'ai créé un fichier dans /etc/nginx/includes appelé root.access. Dans ce fichier, j'ai :
# nginx configuration
location /img {
rewrite ^/img-(.*)\.html /img.php?id=$1 break;
}
location /slide {
rewrite ^/slide-(.*)\.html /slider.php?id=$1 break;
}
location /page {
rewrite ^/page-(.*)\.html /page.php?name=$1 break;
}
location /contact {
rewrite ^/contact\.html$ /contact.php break;
}
Pour le deuxième fichier situé dans le dossier "upload", j'ai créé un fichier dans /etc/nginx/includes appelé upload.access. Ce fichier contient les éléments suivants :
# nginx configuration
location /upload {
if ($http_referer !~ "^http://(.+\.)?foo\.com/"){
rewrite .*\.(jpe?g|gif|bmp|png)$ /nohotlink.gif break;
}
}
location ~ \.(php|sql|php3|php4|phtml|pl|py|jsp|asp|htm|shtml|sh|cgi)$ {
deny all;
}
Et pour le troisième et dernier fichier, j'ai créé un fichier dans /etc/nginx/includes names small.access. Le contenu de ce fichier est le suivant :
# nginx configuration
location /upload/small {
}
Dans le fichier de configuration du bloc serveur, j'ai
location / {
try_files $uri $uri/ /index.php;
include /etc/nginx/includes/root.access;
}
location /upload {
include /etc/nginx/includes/upload.access;
}
location /upload/small {
include /etc/nginx/includes/small.access;
}
Avec cette configuration, lorsque j'essaie le site, je reçois des erreurs 403. Le journal des erreurs de Nginx rapporte :
[error] 18156#0: *7 access forbidden by rule, client: 111.**.**.**, server: foo.com, request: "POST /upload.php HTTP/1.1", host: "foo.com", referrer: "http://foo.com/"
Maintenant, sous apache, tout fonctionne sans problème. Mais je ne vois pas pourquoi je reçois des erreurs 403. Je crains également que les règles de réécriture telles que je les ai énoncées, au-delà de l'erreur 403, ne fonctionnent pas correctement du tout. Quelqu'un peut-il m'aider ? Je ne vois pas ce qui ne va pas.