web-dev-qa-db-fra.com

Règle de réécriture pour jolie URL: redirection de 'index.php? Paramètre' vers 'slug / index.html'

Mon URL d'origine est:

    http://example.com/video_in.php?video_id=1

et je veux que mon lien soit:

   http://example.com/shaandaar/kinna_sona.html

shaandaar et kinna_sona sont les slugs de ma base de données.

Ceci est mon fichier .htaccess

  AddDefaultCharset utf-8
  Options +FollowSymlinks -Indexes
  RewriteEngine on 
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} -d [OR]
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteRule ^ - [L]

 RewriteRule ^artist/(css|js|images)/(.*)?$/$1/$2 [L,QSA]
 RewriteRule ^artists/([^/]*)\.html$ artist_search.php?&letter=$1 [QSA,L]
 RewriteRule ^albums/([^/]*)\.html$ album_search.php?&letter=$1 [QSA,L]
 RewriteRule ^artist/([^/]*)\.html$ artist_in.php?artist_id=$1 [QSA,L]
 RewriteRule ^album/([^/]*)\.html$ album_in.php?&album_id=$1 [QSA,L]
 RewriteRule ^([^/]*)/([^/]*)\.html$ song_in.php?album_id=$1&song_id=$2   [QSA,L]
 RewriteRule ^([^/]*)/([^/]*)\.html$ video_in.php?album_id=$1&video_id=$2 [QSA,L]

tous les liens fonctionnent axceppt video_in.php

    What should I write in my *.htaccess* file?
2
Aman patel

et je veux que mon lien soit: http://example.com/shaandaar/kinna_sona.html

shaandaar et kinna_sona sont les limaces de ma base de données. Que dois-je écrire dans mon fichier .htaccess?

C'est la meilleur façon:

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)\.html$ /video_in.php?firstslug=$1&secondslug=$2 [L]

Dans la RewriteRule, le ^ commence la correspondance. This: ([^/]+) se décompose comme suit:

[^/] signifie que rien ne correspond, sauf /. C'est un bon moyen de ne pas confondre le moteur de réécriture.

Le plus signifie correspondre à un ou plusieurs. Donc, [^/]+ signifie correspondre à un nombre quelconque de caractères tant qu'il n'y a pas de /.

Ensuite, je mets l'ensemble entre parenthèses afin que je puisse l'utiliser plus tard. Le premier ensemble de crochets est n ° 1 et le second ensemble est n ° 2.

j'ai ensuite ajouté une barre oblique inversée devant le point, car c’est une façon de spécifier un point en tant que caractère littéral à comparer.

Ensuite, bien sûr, la html doit également correspondre.

Pour terminer la correspondance, j'utilise le $.

Lorsque la correspondance est trouvée, /video_in.php?firstslug=(first captured value)&secondslug=(second captured value) sera chargé en arrière-plan, tandis que l'URL conviviale reste dans le navigateur Web.

Dans votre cas et si vous utilisez votre URL, les valeurs sont alors respectivement shaandaar et kinna_sona. alors vous pouvez utiliser votre script pour lire les valeurs.

Si vous souhaitez adopter un style paranoïaque, vous pouvez utiliser ce script pour vous assurer que vos valeurs sont traitées correctement:

<?php
  print_r($_GET);
  exit();
?>

Lorsque le script est exécuté, vous devriez voir un tableau avec vos paires nom/valeur, un par ligne.

2
Mike

RewriteRule ^([^/]*)/([^/]*)\.html$ song_in.php?album_id=$1&song_id=$2 [QSA,L]RewriteRule ^([^/]*)/([^/]*)\.html$ video_in.php?album_id=$1&video_id=$2 [QSA,L]

Vous êtes en conflit avec les deux dernières directives. Vous utilisez le même motif pour les deux, donc toutes ces demandes vont à song_in.php. La seconde directive (video_in.php) ne sera jamais traitée.

En supposant que /shaandaar/kinna_sona.html (par exemple) puisse faire référence à une chanson ou à une vidéo, vous devrez différencier les chansons des vidéos dans l'URL.

0
MrWhite