Comment écrire plusieurs conditions et règles pour .htaccess?

J’ai les éléments suivants dans un fichier .htaccess pour mon site Web

 RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ profile.php?membername=$1 [L] RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]  # Works RewriteRule ^(.*)$ profile.php?membername=$1 [L] # Does not work RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC] 

Si vous changez tout cela en dessous, le résultat est inversé.

 # No longer works: RewriteRule ^(.*)$ profile.php?membername=$1 [L] # Now works: RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]  RewriteEngine On RewriteCond %{SCRIPT_FILENAME} -f RewriteCond %{SCRIPT_FILENAME} -d RewriteRule ^(.*)$ profile.php?membername=$1 [L] RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]  

Que se passe-t-il? Je n’ai aucune idée.

On dirait que ce que vous devez faire ici est de garder les tests négatifs sur REQUEST_FILENAME et d’en inverser l’ordre. Sinon, le plus générique ^(.*) Correspond toujours en premier et remplace ^poem/ .

  RewriteEngine On # Negative conditions here... # Using REQUEST_FILENAME instead of SCRIPT_FILENAME RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Match the more specific rule first... RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC] # Match the generic rule last. RewriteRule ^(.*)$ profile.php?membername=$1 [L]