Maison  >  Questions et réponses  >  le corps du texte

Utilisez .htaccess pour réécrire les chemins de fichiers vers les noms de fichiers via des chaînes de requête

J'ai du mal à réécrire les chemins de fichiers à l'aide de chaînes de requête

J'essaie d'obtenir une URL comme celle-ci :

https://url.com/products/1_Samsung_Galaxy

Et réécrivez la requête sur mon serveur comme ceci :

https:url.com/model.php?id=1&title=Samsung_Galaxy

Voici à quoi ressemble mon htaccess jusqu'à présent :

RewriteEngine On

#rewrite no ending files to .php if file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !products/
RewriteRule ^([^.]+)$ .php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/products/([1-9]+)(.*)$ model.php?id=&title= [NC,L]

Avec la configuration actuelle, les requêtes sont envoyées à un fichier nommé products.php situé dans le même répertoire que model.php, mais semble être dans un répertoire différent car certains fichiers de script référencés dans products.php avec des chemins relatifs génèrent des exceptions sont des erreurs. où l'objet qu'ils contiennent n'existe pas.

En fait, mon principal problème est que je ne connais pas la syntaxe Apache ni son fonctionnement, et j'ai du mal à trouver des ressources pour en apprendre davantage sur Apache. Pour une raison quelconque, la documentation Apache n’est pas d’une grande aide. S'il existe une bonne ressource pour apprendre à écrire des fichiers Apache, j'aimerais également la consulter.

P粉035600555P粉035600555315 Il y a quelques jours543

répondre à tous(1)je répondrai

  • P粉463824410

    P粉4638244102024-01-02 10:59:01

    Votre question est un peu vague, mais je pense que c'est ce que vous recherchez :

    RewriteEngine On
    
    # rewrite /products/ to /model.php/.....
    RewriteRule ^/?products/(\d+)(.*)$ /model.php?id=&title= [L]
    
    # rewrite to "...php" if such file exists
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^ %{REQUEST_URI}.php [L]

    Ces règles fonctionneront si elles sont implémentées dans la configuration hôte du serveur http. Alternativement, si vous n'avez pas accès au fichier, vous pouvez y accéder dans un fichier de configuration distribué (".htaccess") situé dans le dossier DOCUMENT_ROOT de l'hôte http.

    Principales différences par rapport à votre tentative :

    • Le chemin cible est écrit sous la forme d'un chemin absolu. Cela résout le problème de la réécriture des requêtes dans différents dossiers.
    • Implémentez d'abord la réécriture d'exception dans /model.php, afin qu'elle soit exécutée plus haut dans le fichier puisque les règles sont traitées de haut en bas. Cela sauve certaines conditions.

    Vous avez également mentionné que vous n'êtes "pas familier avec la syntaxe Apache" et que vous auriez du mal à trouver des ressources pour l'apprendre.

    Je recommande toujours la documentation officielle du module Apache. Ils sont d'excellente qualité et fournissent d'excellents exemples :

    https://httpd.apache.org/docs/current/mod /mod_rewrite.html

    répondre
    0
  • Annulerrépondre