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?
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.
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.