2017-10-16 7 views
1

Je n'ai jamais utilisé mod_rewrite auparavant, donc je me bats avec la mise en place de règles appropriées pour mon cas d'utilisation.mod_rewrite si le fichier dans le sous-répertoire n'existe pas

J'ai une URL qui ressemble à ce que: domain.com/pict/123456 structure de répertoire est comme ceci:

/pict/ |-- autogenerated/ |-- 12345.png |-- 87654.png |-- gen.php |-- .htaccess

et ce que je voudrais réaliser est:

Si 12345.png n'existe pas dans autogenerated , réécrire l'URL à gen.php?id=12345

d'autre servir le autogenerated/12345.png fichier

J'ai essayé différentes solutions trouvées sur Internet (ainsi que la plupart des réponses de Stackoverflow - en vain).

mon fichier .htaccess ressemble à ceci:

<IfModule mod_rewrite.c> 

RewriteEngine On 

RewriteCond autogenerated/%{REQUEST_FILENAME}.png -f 
RewriteRule ^(.+)$ autogenerated/$1.png [L] 

RewriteRule ^(.*)$ generate.php?id=$1 [QSA,L] 


</IfModule> 

J'ai aussi essayé de changer la RewriteCond comme ceci:

RewriteCond autogenerated/$1.png -f

RewriteCond autogenerated/%{REQUEST_URI}.png -f

RewriteCond %{DOCUMENT_ROOT}/autogenerated/%{REQUEST_FILENAME}.png -f

RewriteCond %{DOCUMENT_ROOT}/autogenerated/$1.png -f

RewriteCond %{DOCUMENT_ROOT}/pict/autogenerated/%{REQUEST_FILENAME}.png -f

RewriteCond %{DOCUMENT_ROOT}/pict/autogenerated/$1.png -f

et peu importe ce que je fais, d'abord RewriteRule déclenche jamais, et tout est envoyé à l'gen.php

suis-je manque quelque chose ici?

+1

Les deux REQUEST_FILENAME et REQUEST_URI contiennent les informations de chemin. // Où se trouve votre fichier htaccess, dans la racine ou dans le dossier pict? – CBroe

+0

oh. Je pensais que REQUEST_FILENAME ne contient que ce qui est après "/" mon fichier 'htaccess' est dans le dossier" pict " – Tomaski

Répondre

1

Vous pouvez utiliser des règles comme celui-ci à l'intérieur pict/.htaccess:

RewriteEngine On 
RewriteBase /pict/ 

# if image file exists inside pict/autogenerated/ 
RewriteCond %{DOCUMENT_ROOT}/pict/autogenerated/$1.png -f 
RewriteRule ^(.+)$ autogenerated/$1.png [L] 

# else rewrite to generate.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ generate.php?id=$1 [QSA,L] 
+1

vous êtes une star! merci beaucoup :) ne comprend toujours pas pourquoi cela n'a pas fonctionné pour moi et le réglage de 'RewriteBase' l'a fait fonctionner, dur ... o_O – Tomaski