web-dev-qa-db-fra.com

Le mappage statique d'un script PHP vers un autre script à l'aide d'un fichier .htaccess génère 404 erreurs.

Après avoir lu de nombreux articles sur la réécriture d'URL, je reste bloqué avec des erreurs de statut 404.

Mon objectif:

Un 'statique' réécrit les URL, comme suit (l'utilisateur clique ou entre l'un des URL/script, mais en interne, l'autre est en cours d'exécution - les paramètres sont également 'statiques', donc je pense que je ne peux pas utilisez n'importe quel type de motif (*.) et $1 dans la règle ...:

  • domain.tld/en/abc.php?foo à domain.tld/en/xyz.php?bar (1er niveau)
  • domain.tld/en/abc.php?foo&blabla à domain.tld/en/xyz.php?bar&otherstring (2e niveau)

Informations supplémentaires:

  • Le répertoire 'en' existe.
  • Script abc.php ne existe pas existe
  • Le script xyz.php existe et fonctionne correctement avec le ou les paramètres statiques donnés.

Mon .htaccess:

Options +FollowSymLinks 
RewriteEngine On
RewriteRule ^en/abc\.php\?foo&blabla$ /en/xyz.php?bar&otherstring [NC,L]
RewriteRule ^en/abc\.php\?foo$ /en/xyz.php?bar [NC,L]

J'ai déjà une erreur 404 sur cette dernière règle plus simple. Je n'ai pas accès au rewritelog.

4
LarryG001

Vous ne pouvez pas rechercher la chaîne de requête à l'aide du modèle RewriteRule (la chaîne de requête est supprimée avant la correspondance du modèle, de même que le nom d'hôte, etc.). Ainsi, les règles que vous avez énoncées ci-dessus ne correspondront tout simplement pas et vous obtiendrez un code 404. Cependant, vous pouvez utiliser la directive RewriteCond pour vérifier la chaîne de requête:

Par exemple:

domain.tld/en/abc.php?foo à domain.tld/en/xyz.php?bar

RewriteCond %{QUERY_STRING} =foo
RewriteRule ^en/abc\.php$ /en/xyz.php?bar [L]

Notez que cela correspond à la chaîne de requête exacte "foo". J'ai supprimé le drapeau NC, sauf si vous avez spécifiquement besoin d'une correspondance insensible à la casse?

2
MrWhite