2012-01-19 4 views
0

En essayant de réécrire mes URLs et j'ai les éléments suivants dans mon htaccess où le pageid est l'identifiant mysql pour chaque page et le titre est le titre de la page.URL RewriteRule

RewriteRule ^([^/]*)/([^/]*)\.html$ content.php?pageid=$1&title=$2 [L] 

structure URL actuelle basée sur cette règle est: http://domian.com/3/Contact.html

Et voudrait changer pour: http://domian.com/Contact.html

J'ai aussi cette fonction php qui modifie l'URL :

function createPageLink($id) 
    { 
     global $db, $core; 

     $sql = "SELECT id, slug FROM pages WHERE id = '".(int)$id."'"; 
     $row = $db->first($sql); 

     $slug = $row['slug']; 

     if ($core->seo == 1) { 
      $display = $core->site_url . '/' . intval($id) . '/' . sanitize($slug) . '.html'; 
     } else { 
      $display = $core->site_url . '/content.php?pageid=' . intval($id); 
     } 
     return $display; 
    } 

Donc, en gros, supprimer le numéro après l'URL et avoir juste le titre seulement. Je sais que c'est assez simple mais ça me rend fou. Merci

+0

L'identificateur de page n'est-il plus nécessaire ou doit-il être codé en dur dans la réécriture? –

+0

Non, je n'ai plus besoin de l'ID de page car il n'est pas nécessaire ... il vient avec le CMS. – Dony

Répondre

4

Vous cherchez ce,

RewriteRule ^([^/]*)\.html$ content.php?title=$1 [L] 

Ce qui suit correspond à la fois.

RewriteRule ^([^\/]*)?/?([^\/]*)\.html$ content.php?pageid=$1&title=$2 [L] 

Lorsque je l'ai testé, les fichiers suivants ont été utilisés.

<IfModule mod_rewrite.c> 
    # Turn on URL rewriting 
    RewriteEngine On 

    RewriteBase/

    # Allow any files or directories that exist to be displayed directly 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 

    # Rewrite all other URLs to index.php/URL 
    RewriteRule ^([^\/]*)?/?([^\/]*)\.html$ index.php?part1=$1&part2=$2 [L] 
<IfModule mod_rewrite.c> 

fichier index.php à tester.

<?php 
var_dump($_GET); 
var_dump($_SERVER); 
?> 
+0

Non, cela ne fonctionne pas. – Dony

+0

@Dony Je l'ai testé. –

+0

Je l'ai comme ça .... faut-il aller à l'intérieur ou à l'extérieur ce \t RewriteEngine On RewriteBase/ RewriteRule^([^ /] *)/([^ /] *) \ .html $ content.php? pageid = $ 1 & title = $ 2 [L] Dony

1

Eh bien, vous devez d'abord créer des jetons pour chaque page. Par exemple: token Contact se réfère à l'ID 1. Vous pouvez le faire avec des tableaux, par exemple, ou un switch.

Exemple pour PHP:

$token_ids = new array(); 
$token_ids['Home'] = 1; 
$token_ids['Contact'] = 2; 

$current_token = $_GET['title']; // following your example 

if(!isset($token_ids[$current_token])) { 
    // ERROR or REDIRECT like to home: 
    $current_token = 'Home'; 
} 

// similar to $_GET['pageid'] of example 
$current_token_id = $tokens_id[$current_token]; 

Vous pouvez le faire sur MySQL aussi, tout simplement vous avez besoin d'enregistrer un jeton unique pour chaque page. Comme:

id | token  | page_title 
1 Home  Hello! 
2 Contact  Contact us! 
+0

Je l'ai déjà fait. J'essaye juste de retirer l'identification si ainsi son nettoyeur. – Dony

+0

Voulez-vous rediriger /3/Contact.html vers /Contact.html? Ou acceptez simplement /Contact.html au lieu de /3/Contact.html? –

+0

Oui garder /Contact.html .... Je ne veux pas l'ID – Dony

0

Il me semble, si vous avez vraiment pas besoin de l'ID, vous pouvez simplement effectuer les opérations suivantes (ne pas oublier de nettoyer le titre avant de chercher la db bien):

RewriteRule ^(.*)\.html$ content.php?title=$1 [L] 
+0

Non, je n'ai pas besoin de l'ID du tout, mais j'ai essayé votre solution et n'a pas fonctionné. – Dony

+0

Alors dois-je supprimer tous les ID, puis appliquer cette règle? – Dony

+0

@Dony Les demandes des clients incluent-elles toujours l'ID ou non? Si vous n'en avez pas besoin, supprimez-les - et cela devrait fonctionner. – Izkata