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]